home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 626-637 / disk_633 / galer / source / sub.c < prev   
C/C++ Source or Header  |  1992-05-06  |  6KB  |  270 lines

  1. /****************************************************************/
  2. /*                                */
  3. /* Sub.c - dieses Modul enthält Unterroutinen für den GALer    */
  4. /*                                */
  5. /* compilieren: cc sub.c                    */
  6. /*                                */
  7. /****************************************************************/
  8.  
  9.  
  10.  
  11. #include "exec/types.h"
  12. #include "libraries/dos.h"
  13. #include "libraries/dosextens.h"
  14. #include "exec/memory.h"
  15. #include "intuition/intuition.h"
  16. #include "functions.h"
  17.  
  18. #include "GALer.h"
  19.  
  20. #define    YES_GADID    1
  21. #define    NO_GADID    2
  22. #define STR_GADID    3
  23.  
  24.  
  25. extern    struct    Window     *window;
  26. extern    struct    RastPort *rp;
  27.  
  28. int    ytxt = 160;                /*Startpos. für PrintText*/
  29.  
  30. UBYTE    ErrorLineStr[] = {"Fehler in Zeile ....:"};
  31.  
  32.  
  33. SHORT BorderVectorsR[] = {0,0,82,0,82,14,0,14,0,0};
  34. SHORT BorderVectorsS[] = {0,0,257,0,257,9,0,9,0,0};
  35. struct Border BorderR  = {-1,-1,1,0,JAM1,5,BorderVectorsR,NULL};
  36. struct Border BorderS  = {-1,-1,1,0,JAM1,5,BorderVectorsS,NULL};
  37.  
  38. struct IntuiText ITextN = {2,0,JAM1,14,3,NULL,(UBYTE *)"Abbruch",NULL};
  39. struct IntuiText ITextY = {2,0,JAM1,16,3,NULL,NULL,NULL};
  40.  
  41. struct Gadget GadgetN = {NULL,206,53,81,13,NULL,RELVERIFY,
  42.              BOOLGADGET+REQGADGET,
  43.              (APTR)&BorderR,NULL,&ITextN,NULL,NULL,NO_GADID,NULL};
  44. struct Gadget GadgetY = {&GadgetN,26,53,81,13,NULL,RELVERIFY,
  45.              BOOLGADGET+REQGADGET,
  46.              (APTR)&BorderR,NULL,&ITextY,NULL,NULL,YES_GADID,NULL};
  47.  
  48. UBYTE GadgetSBuff[60];
  49. struct StringInfo StrSInfo = {GadgetSBuff,NULL,0,60,
  50.                   0,0,0,0,0,0,0,0,NULL };
  51. struct Gadget GadgetS = {&GadgetY,28,34,260,8,NULL,
  52.              RELVERIFY+STRINGCENTER,STRGADGET+REQGADGET,
  53.              (APTR)&BorderS,NULL,NULL,NULL,
  54.                (APTR)&StrSInfo,3,NULL };
  55.  
  56.  
  57. struct IntuiText ITextW = {2,0,JAM1,19,15,NULL,NULL,NULL};
  58.  
  59. struct Requester req   = {NULL,170,40,310,76,0,0,
  60.              &GadgetS,NULL,&ITextW,
  61.              NULL,3,NULL,NULL,NULL };
  62.  
  63.  
  64. /* MyRequest:
  65.    öffnet einen Requester und wartet auf die Antwort
  66.    Aufruf: antwort=MyRequest(mode,text);
  67.        mode: ASK_REQ : Requester mit Weiter/Abbruch-Gadgets
  68.          SAVE_REQ: Requester mit SAVE/Abbruch-Gadgets     
  69.          LOAD_REQ: Requester mit LOAD/Abbruch-Gadgets     
  70.          INFO_REQ: Requester ohne Gadgets (wird automatisch geschlossen)
  71.        text: Zeiger auf Requester-Text
  72.        antwort: 0=Abbruch oder Fehler, 1=Bestätigung
  73. */
  74. MyRequest(mode,text)
  75. int    mode;
  76. UBYTE    *text;
  77. {
  78. struct    IntuiMessage    *imsg;
  79. int    looping;
  80. ULONG    class;
  81. USHORT    gadID;
  82.  
  83.  
  84.  ITextW.LeftEdge=(SHORT)(155-strlen(text)*8/2);
  85.  ITextW.IText=text;
  86.  
  87.  switch (mode) {
  88.    case    ERR_REQ: {
  89.      req.ReqGadget=&GadgetY;
  90.      ITextY.IText=(UBYTE *)"Abbruch";
  91.      break;
  92.     }   
  93.    case ASK_REQ: {
  94.      req.ReqGadget=&GadgetY;
  95.      ITextY.IText=(UBYTE *)"Weiter";
  96.      break;
  97.     }   
  98.    case LOAD_REQ: {
  99.      req.ReqGadget=&GadgetS;
  100.      ITextY.IText=(UBYTE *)" LOAD";
  101.      break;
  102.     }   
  103.    case SAVE_REQ: {
  104.      req.ReqGadget=&GadgetS;
  105.      ITextY.IText=(UBYTE *)" SAVE";
  106.      break;
  107.     }   
  108.    case INFO_REQ: {
  109.      req.ReqGadget=NULL;
  110.      break;
  111.     }
  112.   }
  113.  if (Request(&req,window)) {
  114.    if (mode==INFO_REQ) {
  115.      WaitForTimer(1L,500000L);            /*1.5 Sekunden warten*/
  116.      EndRequest(&req,window);
  117.      return(1);
  118.     }
  119.    else {
  120.      looping=TRUE;
  121.      while (looping) {
  122.        imsg = (struct IntuiMessage *) GetMsg(window->UserPort); 
  123.        if (!imsg) WaitPort (window->UserPort);
  124.        else {
  125.          class=imsg->Class;
  126.      if (class==GADGETUP) gadID=((struct Gadget *)imsg->IAddress)->GadgetID;
  127.         ReplyMsg(imsg);
  128.      if (class==GADGETUP) {
  129.        if ((gadID==YES_GADID)||(gadID==STR_GADID)) {
  130.          EndRequest(&req,window);
  131.          return(1);
  132.         }
  133.        if (gadID==NO_GADID) {
  134.          EndRequest(&req,window);
  135.          return(0);
  136.         }
  137.       }
  138.         }
  139.       }
  140.    }
  141.   }
  142.  else
  143.    return(0);
  144. }
  145.  
  146.  
  147.  
  148.  
  149. /* FileSize:
  150.    gibt die Länge einer Datei zurück
  151.    Aufruf: size=FileSize(filename);
  152.            filename: Zeiger auf Filenamen
  153.    Ergebnis: -1 : File existiert nicht
  154.          -2 : kein Speicher für FileInfoBlock
  155.         size: Filelänge
  156. */
  157. FileSize(filename)
  158. UBYTE    *filename;
  159. {
  160. struct    FileInfoBlock    *fib;
  161. struct    FileLock    *lock;
  162. LONG    filesize;
  163.  
  164.  if((lock=(struct FileLock *) Lock(filename,ACCESS_READ))) {
  165.    fib=(struct FileInfoBlock *)AllocMem((long)sizeof(struct FileInfoBlock),MEMF_CHIP);
  166.    if (fib!=NULL) {
  167.      if (Examine(lock,fib))
  168.        filesize=fib->fib_Size;
  169.      else filesize=-1L;
  170.      UnLock(lock);
  171.      FreeMem(fib,(long)sizeof(struct FileInfoBlock));
  172.      return(filesize);
  173.     }
  174.    else
  175.      return(-2L);                /*Mem-Error*/
  176.   }
  177.  else
  178.    return(-1L);                    /*File existiert nicht*/
  179. }
  180.  
  181.  
  182. /* ReadFile
  183.    File einlesen
  184.    Aufruf: error=ReadFile(filename,filesize,filebuff)
  185.            filename: Zeiger auf Filenamen
  186.        filesize: Größe der Datei in Bytes
  187.        filebuff: Adresse, an die die Datei gelesen werden soll
  188.    Ergebnis: error: 1=kein Fehler, 0=Fehler
  189. */
  190. ReadFile(filename,filesize,filebuff)
  191. UBYTE    *filename,*filebuff;
  192. LONG    filesize;
  193. {
  194. int     actlength;
  195. struct    FileHandle    *fh;
  196.  
  197.  if ((fh=Open(filename,MODE_OLDFILE))) {
  198.    actlength=Read(fh,filebuff,filesize);
  199.    Close(fh);
  200.    if (actlength==-1L) return(0L);
  201.    else return(1L);
  202.   }
  203.  else
  204.   return(0L);
  205. }
  206.  
  207.  
  208.  
  209.  
  210. /*ErrorReq
  211.   gibt zu einer Fehlernummer den entsprechenden Requester aus
  212.   Aufruf: ErrorReq(errornum);
  213.       errornum: Fehlernummer
  214. */
  215. ErrorReq(errornum)
  216. int errornum;
  217. {
  218.  switch (errornum) {
  219.    case 1: { MyRequest(ERR_REQ,(UBYTE*)"kann Datei leider nicht finden!");
  220.          break; }
  221.    case 2: { MyRequest(ERR_REQ,(UBYTE*)"nicht genug freier Speicher vorhanden!");
  222.          break; }
  223.    case 3: { MyRequest(ERR_REQ,(UBYTE*)"kann Datei leider nicht laden!");
  224.          break; }
  225.    case 4: { MyRequest(ERR_REQ,(UBYTE*)"Datei ist leer!");
  226.          break; }
  227.    case 5: { MyRequest(ERR_REQ,(UBYTE*)"Fehler in Jedec-Datei!");
  228.          break; }
  229.    case 6: { MyRequest(ERR_REQ,(UBYTE*)"GAL ist NICHT leer!");
  230.          break; }
  231.    case 7: { MyRequest(ERR_REQ,(UBYTE*)"keine gültigen Pinnamen vorhanden");
  232.          break; }
  233.    case 8: { MyRequest(ERR_REQ,(UBYTE*)"Datei läßt sich nicht schließen!");
  234.          break; }
  235.    case 9: { MyRequest(ERR_REQ,(UBYTE*)"falsches GAL eingestellt!");
  236.          break; }
  237.   }
  238. }
  239.  
  240.  
  241.  
  242.  
  243. /* PrintText
  244.    gibt Text im Text-Feld aus
  245.    Aufruf: PrintText(text);
  246.        text: Zeiger auf Text
  247. */
  248. PrintText(text)
  249. UBYTE    *text;
  250. {
  251.  if (ytxt<190) ytxt+=10;
  252.  else ScrollRaster(rp,0L,10L,31L,162L,609L,194L);
  253.  Move(rp,40L,(long)ytxt);
  254.  Text(rp,text,(long)strlen(text));
  255.  
  256. }
  257.  
  258. /*gibt "Fehler in Zeile xyz" aus
  259.   Aufruf: PrintErrorLine(line);
  260.       line: Zeilennummer
  261. */
  262. PrintErrorLine(line)
  263. int line;
  264. {
  265.  sprintf(&ErrorLineStr[16],"%4d:",line);
  266.  PrintText(&ErrorLineStr);
  267. }
  268.  
  269.  
  270.